package com.egoo.ticket.server.dao;

import com.egoo.ticket.server.pojo.entity.WorkOrderStatus;
import com.egoo.ticket.server.pojo.vo.InteractiveDataVo;
import com.egoo.ticket.server.pojo.vo.WorkOrderStatusDataVo;
import com.egoo.ticket.server.pojo.vo.WorkOrderStatusVo;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component;

import java.util.List;


/**
 * @author Administrator
 */
@Component
public interface WorkOrderStatusDao {

	/**
	 * TODO 根据Id获取工单状态信息
	 * @param id
	 * @return
	 */
	WorkOrderStatus selectById(@Param("id") Integer id,
							   @Param("tenantId")String tenantId);

	/**
	 * TODO 根据状态名称进行模糊查询
	 * @param name
	 * @param tenantId
	 * @return
	 */
	List<WorkOrderStatus> selectByName(@Param("name") String name,
                                       @Param("tenantId") String tenantId);

	/**
	 * TODO 根据状态排序获取工单状态信息
	 * @param ordering
	 * @return
	 */
	WorkOrderStatus selectOrdering(@Param("ordering") Integer ordering);

	/**
	 * TODO 新建工单状态信息
	 * @param workOrderStatus
	 * @return
	 */
	Integer insertStatus(WorkOrderStatus workOrderStatus);

	/**
	 * TODO 编辑工单状态信息
	 * @param workOrderStatus
	 * @return
	 */
	Integer updateStatus(WorkOrderStatus workOrderStatus);

	/**
	 * TODO 删除工单状态信息
	 * @param workOrderStatus
	 * @return
	 */
	Integer deleteStatus(WorkOrderStatus workOrderStatus);

	/**
	 * TODO 获取当前状态排序的最大值
	 * @return
	 */
	Integer selectOrderMax();

	/**
	 * TODO 根据状态名称获取工单状态信息
	 * @param name
	 * @param tenantId
	 * @return
	 */
	WorkOrderStatus selectByEqualsName(@Param("name") String name,
                                       @Param("tenantId") String tenantId);

	/**
	 * TODO 获取所有的工单状态信息
	 * @param tenantId
	 * @return
	 */
	List<WorkOrderStatus> selectAll(@Param("tenantId") String tenantId);

	/**
	 * TODO 分页
	 * @param currentPage
	 * @param pageSize
	 * @param tenantId
	 * @return
	 */
	List<WorkOrderStatus> selectAllByCount(@Param("currentPage") Integer currentPage,
                                           @Param("pageSize") Integer pageSize,
                                           @Param("tenantId") String tenantId);

	/**
	 * TODO 通过状态名称模糊查询WorkOrderStatusVo对象（目前没用到）
	 * @param name
	 * @return
	 */
	List<WorkOrderStatus> selectAllStatusByName(@Param("name") String name);

	/**
	 * TODO 通过状态名称模糊查询返回interactiveData1对象
	 * @param name
	 * @return
	 */
	List<WorkOrderStatusDataVo> selectAllStatusByNames(@Param("name") String name);

	/**
	 * TODO 获取所有对应的workOrderStatusVo（id ，name）
	 * @return
	 */
	List<WorkOrderStatusVo> selectAllStatus();

	/**
	 * TODO 获取所有的WorkOrderStatusData
	 * @return
	 */
	List<WorkOrderStatusDataVo>  selectAllStatuss(@Param("tenantId") String tenantId);

	/**
	 * TODO 获取interactiveData类型的工单状态信息
	 * @param tenantId
	 * @return
	 */
	List<InteractiveDataVo>  selectAllWorkOrderStatusName(@Param("tenantId") String tenantId);

	/**
	 * TODO 关联work_order查询工单状态名称
	 * @param statusId
	 * @return
	 */
	WorkOrderStatus selectStatusNameById(@Param("statusId") Integer statusId);

	/**
	 * TODO 根据状态名称获取工单状态信息(不包含状态不变)
	 * @param name
	 * @param tenantId
	 * @return
	 */
	List<WorkOrderStatus> selectByNameNotContainNotNoChanging(@Param("name") String name, @Param("tenantId") String tenantId);

	List<WorkOrderStatus> selectAllData(@Param("tenantId") String tenantId);

	Integer insertBatch(List<WorkOrderStatus> statuses);
}
